﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Math2DStruct
{
    struct Matrix3x3
    {
        public XNumber a11, a12, a13;
        public XNumber a21, a22, a23;
        public XNumber a31, a32, a33;

        public void One()
        {
            a11 = 1; a12 = 0; a13 = 0;
            a21 = 0; a22 = 1; a23 = 0;
            a31 = 0; a32 = 0; a33 = 1;
        }

        public void BuildT(XVector2 pos)
        {
            a11 = 1; a12 = 0; a13 = 0;
            a21 = 0; a22 = 1; a23 = 0;
            a31 = pos.x; a32 = pos.y; a33 = 1;
        }

        public void BuildR(XNumber angle)
        {
            var r = angle * XIntMath.PI / 180;
            a11 = XIntMath.Cos(r); a12 = XIntMath.Sin(r); a13 = 0;
            a21 = -XIntMath.Sin(r); a22 = XIntMath.Cos(r); a23 = 0;
            a31 = 0; a32 = 0; a33 = 1;
        }

        public XVector2 Transform(XVector2 pos)
        {
            var x = a11 * pos.x + a21 * pos.y + a31;
            var y = a12 * pos.x + a22 * pos.y + a32;
            return new XVector2(x, y);
        }

//         public Matrix3x3 Multiply(Matrix3x3 left, Matrix3x3 right)
//         {
// 
//         }
    }
}
